package com.se.xb.utils;

import java.io.*;
import java.util.UUID;

public class FileUploadUtils {

    /**
     * 上传文件方法
     *
     * @param fileName 原始文件名
     * @param fileBytes 文件内容，以字节数组形式表示
     * @return 返回文件的访问路径
     *
     * 该方法首先会提取文件后缀，然后使用UUID生成新的文件名，以确保文件名的唯一性
     * 接着，它会指定文件的保存路径，并将文件内容写入到新创建的文件中
     * 同时，该方法还会在另一个路径上保存一份文件副本
     * 如果文件保存过程中发生异常，会打印异常信息并返回null
     */
    public static String upload(String fileName, byte[] fileBytes) {
        // 获取文件名后缀
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        // 重新生成文件名
        fileName = UUID.randomUUID().toString() + suffix;
        // 定义文件临时保存路径
        String path = "E:\\Project\\xb\\target\\xb-1.0-SNAPSHOT\\upload\\";
        // 定义文件保存路径
        String  FilePath = "E:\\Project\\xb\\src\\main\\resources\\upload\\";
        // 构造文件的访问路径
        String newFileName = "http://localhost:8080/upload/"+fileName;
        // 创建临时文件对象
        File  file1 = new File(FilePath+fileName);
        try(FileOutputStream fos = new FileOutputStream(file1)) {
            fos.write(fileBytes);
            fos.flush();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 创建文件
        File file = new File(path + fileName);
        // 创建输出流
        try (OutputStream out = new FileOutputStream(file)) {
            out.write(fileBytes);
            out.flush();
            // 返回文件的访问路径
            return newFileName;
        } catch (IOException e) {
            // 记录异常信息
            e.printStackTrace();
            return null;
        }
    }
}
